package java_thinking.unit_15._15_9;

/**
 * @Description :   创建两个接口和一个实现了这两个接口的类，创建两个泛型方法，其中一个的参数边界被限定为
 *                  第一个接口，而另一个的参数边界被限定为第二个接口，创建实现了这两个接口的类的实例，并
 *                  展示它可以用于这两个泛型方法
 * @author: cww
 * @DateTime: 2019-04-05 21:28
 */
interface A {}

interface B {}

class C implements A, B {
    @Override
    public String toString() { return "C"; }
}

public class GenericExtends_E25 {
    /**
     * 两个泛型方法指定方法类型必须继承自A或B
     * @param t
     * @param <T>
     */
    <T extends A> void a(T t){
        System.out.println("a("+t+")");
    }
    <T extends B> void b(T t){
        System.out.println("b("+t+")");
    }

    public static void main(String[] args) {
        C c = new C();
        GenericExtends_E25 extendsE25 = new GenericExtends_E25();
        extendsE25.a(c);
        extendsE25.b(c);
    }
}
